import 'package:flutter/foundation.dart';
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
// 数据库助手
class DatabaseHelper {
  static final DatabaseHelper _instance = DatabaseHelper._internal();
  static Database? _database;

  DatabaseHelper._internal();

  factory DatabaseHelper()=>_instance;//是一个命名构造函数（named constructor）
  // 其作用是为了实现单例模式（Singleton Pattern）。单例模式确保一个类只有一个实例，并提供一个全局访问点。

  Future<Database> get database async{
    if(_database != null)return _database!;

    // 初始化数据库工厂（如果需要）
    await _ensureDataBaseFactoryInitialized();

    _database = await _initDatabase();
    return _database!;
  }

  Future<Database> _initDatabase() async{
    String path = join(await getDatabasesPath(),'todo_database.db');
    return await openDatabase(path,version: 1,onCreate: _onCreate);
  }

  Future<void> _ensureDataBaseFactoryInitialized() async {
    // 对于桌面平台，确保数据库工厂已初始化
    if (!kIsWeb &&
        (defaultTargetPlatform == TargetPlatform.windows ||
            defaultTargetPlatform == TargetPlatform.linux ||
            defaultTargetPlatform == TargetPlatform.macOS)) {
      try {
        // 使用动态导入或方法通道
        // 这里我们假设已经通过其他方式初始化了
        print('确保数据库工厂已初始化 - 桌面平台');
      } catch (e) {
        print('初始化数据库工厂时出错: $e');
      }
    }
}
  Future<void> _onCreate(Database db, int version) async{
    await db.execute('''
    CREATE TABLE todos(
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      title TEXT NOT NULL,
      description TEXT,
      isCompleted INTEGER NOT NULL,
      createdAt INTEGER NOT NULL
    )'''
      );
  }

  Future<void> close() async{
    if(_database !=null){
      await _database!.close();
    }
  }
}
